/*
 * @Github: 参考 https://github.com/GitHubGanKai
 * @FilePath: /refactor-with-vue3/src/components/index.js
 */

function capitalizeFirstLetter(str) {
    return str.charAt(0).toUpperCase() + str.slice(1)
}

function validateFileName(str) {
    return /^\S+\.vue$/.test(str) &&
        str.replace(/^\S+\/(\w+)\.vue$/, (rs, $1) => capitalizeFirstLetter($1))
}

// 自动加载components目录下的vue组件文件，包含子目录；
let requireComponentLevel1 =
    import.meta.globEager("./*.vue");
let requireComponentLevel2 =
    import.meta.globEager("./*/*.vue");
let requireComponent = {...requireComponentLevel1, ...requireComponentLevel2 };


export default {
    install(app) {
        // 找到组件文件夹下以.vue命名的文件，如果文件名为index，那么取组件中的name作为注册的组件名
        // 注意: 组件中name需要驼峰命名，不能是连接符-。
        Object.keys(requireComponent).forEach(filePath => {
            const fileName = validateFileName(filePath)
            const componentConfig = requireComponent[filePath]
            if (!fileName) return;
            const componentName = fileName.toLowerCase() === 'index' ?
                capitalizeFirstLetter(componentConfig.default.name) :
                fileName
            app.component(componentName, componentConfig.default || componentConfig)
        })
    }
}